Tato kniha vznikla jako maturitní práce na Střední průmyslové škole elektrotechniky a informatiky, Ostrava ve školním roce (2011/2012). Sada je výukovým programem předmětu Operační systémy - cvičení odpovídající osnovám tématického plánu učiva stanoveným dle ŠVP. Jednou z jejich hlavní částí je soubor 3 elektronických knih, které mají za cíl sloužit studentům jako učebnice. Třetí z nich právě držíte v rukou. Součástí tohoto balíku jsou také procvičovací testy a prezentace do výuky. Autorem MP je Ivo Kostecký, odborná vedoucí Ing. Lenka Závodná.
Texty byly vzhledem k charakteru práce a její struktuře citovány seznamem zdrojů v závěrečné části každé knihy.
Maturitní práce je majetkem Střední průmyslové školy elektrotechniky a informatiky, Ostrava, příspěvková organizace (autorský zákon č. 121/2000 Sb., §60 odst. 1), bez jejího souhlasu nesmí být nic z obsahu publikováno.
Autor věří, že toto dílo pomůže studentům zvládnout lépe a snadněji probíranou látku.
Linux, jehož domovská stránka je na univerzitě v Helsinkách prozradí, že jde o implementaci specifikace POSIX s rozšířeními BSD a System V. Jinými slovy: jde o Unix implementovaný úplně od začátku. Otcem celého projektu
je Linus Torvalds, student helsinské univerzity. Původně si chtěl jenom zkusit, jak funguje chráněný režim procesoru i386, a dnes vede vývoj verze 2.1 plně funkčního operačního systému, který už byl přenesen i na další platformy.
Síťový operační systém Linux je stále více vyhledáván pro svoji stabilitu a bezpečnost, volné šíření, možnosti konfigurace. Umožňuje vlastní modifikace systému a syntaxe je příbuzná moderním programovacím a skriptovacím
nástrojům jako je například jazyk C, Java, PHP a SQL.
Výhodou Linuxu je kromě velmi příznivého poměru cena/výkon, univerzálnost operačního systému velice dobře pracujícího v síťovém prostředí. Podpora TCP/IP, IPX, AppleTalk a dalších umožňuje nasazovat počítače vybavené Linuxem
jako síťové servery. Není problém se sdílením tiskáren, disků a dalších periferií. Množství hardwaru podporovaného Linuxem je obdivuhodné, zvláště když si uvědomíme, že většina ovladačů nepochází od výrobců hardwarových zařízení,
ale od nezávislých programátorů. Možnost simultánní práce více uživatelů na jednom počítači je samozřejmou vlastností všech Unixů, stejně jako ochrana dat pomocí přístupových práv.
Po nabootování běží v systému jen jádro (kernel). Jádro pak samo spustí první uživatelský program, kterému vyhradí potřebné prostředky a předá mu řízení. Běh programu je pak jádrem usměrňován jedině, když se musí obsloužit i jiné
programy, nebo když je nutné obsloužit periferii. Program může po jádru vyžadovat nějakou systémovou službu, o kterou se přihlásí systémovým voláním.
Běžícím aplikačním programům se říká procesy. Proces se skládá z identifikačních údajů v jádře, kódu v operační paměti a z dalších dat programu. Procesy mohou pomocí systémového volání vytvářet další procesy a stanovovat,
jakým programem budou obsluhovány. Každý proces a datový soubor má svého majitele, kterým může být kterýkoliv registrovaný uživatel.
První proces po startu systému se nazývá vždy init a jeho majitelem je root. Proces init pak vytváří řadu dalších procesů k poskytování komplexních systémových služeb, které běží po celou dobu života systému - tzv. démony
(např. démon cron, který spouští aplikace podle naplánování). Většina démonů obsluhuje síťové služby, "vyčkává" na síťovém portu až přijde síťový paket a předává ho jádru. Jádro požadavek "přeloží" a vrátí ho zpět démonu,
který si ho sám vyhodnotí a určitým způsobem se pak zachová (může třeba navázat komunikaci s jinou aplikací). Démon většinou pro provedení instrukcí vytvoří pomocí systémového volání nový proces a sám pak znovu vyčkává na
další instrukce.
Uživatel má dvě možnosti jak celý systém ovládat a dávat příkazy – CLI nebo GUI. CLI je zkratka pro Command Line Interface – jinými slovy ovládání přes příkazovou řádku. GUI je zkratka Graphical User Interface
– tudíž tolik oblíbené grafické rozhraní ve kterém klikáme na ikony a pracujeme s okny. GNOME, KDE a Xfce jsou názvy uživateli oblíbených GUI. Linux, s GUI a samotnými aplikacemi můžeme označit jako linuxovou distribuci pro
snadnou instalaci.
Každá distribuce nainstaluje své hlavní grafické prostředí (někdy máte při instalaci možnost výběru). Tudíž pokud si vyberete např. distribuci Ubuntu, vyberete si tím i grafické prostředí GNOME. Naopak distribuce Kubuntu
používá grafické prostředí KDE. Dalo by se říci, že se jedná o Ubuntu s grafickým prostředím KDE.
GNOME v distribuci Fedora 10
KDE v distribuci OpenSuSE 11
Xfce v distribuci Mint 10
Základním pracovním nástrojem uživatele UNIXu je shell, program sloužící ke spouštění dalších programů. Shell se aktivuje vždy, když se uživatel přihlásí k unixovskému stroji na konzoli, po síti nebo prostřednictvím terminálu. Používá se k zadání povelů pomocí klávesnice. V grafickém režimu lze spouštět programy pomocí příslušných ikon. Složitější textové příkazy shellu je vhodné napsat do souboru a ten pak spouštět jako kterýkoliv jiný program (program se spouští prostým zadáním jeho jména). Činnost programů lze ovlivnit úpravou jejich konfiguračních souborů.
Existuje velké množství programů určených pro Linux a mezi nimi najdete i známé softwarové kousky, které možná používáte i ve Windows. Jde o software, který jeho vývojáři vyvíjejí jak pro operační systém Linux,
tak i pro operační systémy Windows či další. Těmito kousky jsou např. internetové prohlížeče Mozilla Firefox a Opera, emailový klient Mozilla Thunderbird, kancelářský balík OpenOffice.org, video a audio
přehrávač VLC Media Player, grafický editor GIMP, komunikátor Skype nebo některé hry.
Pokud nejste vázáni na nějaký profesionální (placený) program či hru, tedy už nyní si vystačíte s tzv. free (zdarma) programy a hrami, jistě nebudete mít - ohledně softwaru - žádný problém s přechodem k Linuxu.
Stejně jako celý operační systém Linux, tak i drtivá většina softwaru pro tento operačním systém je zdarma a ve většině případů i česky.
Pokud vyžadujete nějaký konkrétní software či hru na Windows, kterého se nemůžete vzdát, je tu alternativa "emulátoru" Wine. Tento program simuluje prostředí operačního systému Windows, díky němuž je umožněna
instalace programů a jejich spuštění. Wine nemusí být vždy schopen každý program a především hru bez problémů nainstalovat a spustit. Na stránkách Wine si můžete vyhledat informace o konkrétním programu určený pro Windows.
Pokud aplikaci v seznamu najdete, pak u ní bude napsáno, ve které distribuci byla aplikace vyzkoušena, s jakou verzí programu Wine a hodnocení instalace a běhu programu od nejlepší Platinum, Gold, Silver až po nejhorší Garbage.
Dále existují aplikace vycházející z programu Wine: CrossOver Linux, CrossOver Games a Cedega.
Pokud by vám z nějakého důvodu nevyhovovala linuxová alternativa, ani "emulátor" Wine a placené programy postavené na jeho základě, jsou tu dvě další možnosti, jak se dostat k Linuxu a nepřijít o nepostradatelné programy z Windows.
Je možné stáhnout program ze stránek a pak ho nainstalovat, ale proč to dělat složitě, když to jde jednoduše. Snad ve všech běžně používaných distribucích najdete jeden program nazývající se správce balíků. Tento program vám zobrazí seznam s tisíci aplikacemi, utilitkami a ovladači, které si jednoduše vyberete a necháte stisknutím jednoho tlačítka nainstalovat. O ostatní se správce balíků postará sám. Stáhne program, vše potřebné z internetu a nainstaluje. Jedinou podmínkou pro takto snadnou instalaci software je nutné připojení k internetu.
Než se pustíte do bezhlavého hledání a instalací softwaru, uvědomte si, jakou linuxovou distribuci používáte. Jedná se především o grafické prostředí distribuce - GNOME a KDE. Tato dvě velká grafická prostředí mají
několik "svých" typických programů, které je samozřejmě možné nainstalovat a používat také v druhém grafickém prostředí. Musíte však počítat s tím, že vzhled programu nemusí do druhého grafického prostředí příliš zapadat.
Jedná se především o programy, jako je např. kecálek Pidgin (GNOME) a Kopete (KDE), vypalovací program Brasero (GNOME) a K3b (KDE) či hudební přehrávače Rhythmbox (GNOME) a Amarok (KDE). Osobně doporučuji používat software
vyvíjený pro dané grafické prostředí. Samozřejmě je to jen doporučení, pokud se rozhodnete používat aplikaci z KDE v GNOME nebo naopak, nebude v tom žádný problém.
Jak poznáte, který software je určen pro to či ono grafické prostředí? Pokud instalaci provedete pomocí správce balíků, pak bude při výběru programu ve správci balíků zobrazen popis aplikace. Uvidíte v popisu, zda je aplikace vyvíjena pro konkrétní grafické prostředí, nebo zda je "neutrální".
Odkud se software prostřednictvím správce balíků stahuje? Jedná se o již zmiňované repozitáře. Jedná se o úložiště, kam je vkládán software ve formě balíků, včetně všech částí linuxové distribuce. Počet programů se pohybuje ve stovkách až tisících. Repozitáře obsahují veškerý software, od programů pro kancelářskou práci, přes grafické editory až po linuxové hry. V Linuxu si prostřednictvím správců balíků seznam programů z těchto serverů zobrazíte. Stažení vybraného programu a instalaci provede správce balíků za vás.
Pokud není vámi požadovaný software ve správci balíků, pak je možné přidat tzv. repozitáře třetích stran. Jedná se o úložiště softwaru, který nemusí být prověřené výrobcem systému. Také se může jednat o "neoficiální" repozitář, kde jsou uloženy aplikace, které z licenčních důvodů nemohou být v oficiálních repozitářích. Většina velkých distribucí má nástroj pro přidávání takových repozitářů ve svých ovládacích centrech. V některých případech není možné mít počítač připojený k internetu. Stejně jako repozitáře třetích stran je možné si tedy přidat jako repozitář DVD / CD distribuce.
Celá adresářová struktura v Linuxu začíná tzv. kořenovým adresářem, který se označuje symbolem /. Často se také používá anglický výraz root (stejně se označuje i superuživatel-administrátor). Jeho obsah můžete vidět na obrázku.
Nacházejí se zde hlavní systémové adresáře.
Pro lepší představu si můžeme adresářovou strukturu znázornit pomocí schématu. Jak jinak vše vychází z kořene. Oblasti 1-4 vymezují diskové oddíly (partitions). Kořen se svými podadresáři má vyhrazen samostatný diskový oddíl.
Další diskový oddíl bývá obvykle vyhrazen pro adresář /home (do něj se ukládají data uživatelů, viz dále), často se vyhrazují diskové oddíly pro adresáře /usr, /var, /boot, popř. další.
Diskové oddíly jsou připojovány jako určité adresáře – pevné disky obvykle při startu systému a výměnná média za běhu. Předpis, kde se jaký oddíl má připojit, je uložen v souboru fstab v adresáři /etc/; např. zápis /dev/hda6 / ext3 znamená, že 6. oddíl primárního IDE disku (hda6) se připojí jako kořen (/) na souborovém systému ext3. A v případě /dev/hda8 /home xfs bude 8. oddíl téhož disku připojen do adresáře /home se souborovým systémem XFS.
Diskové oddíly, na nichž jsou nainstalovány nelinuxové operační systémy, jsou obvykle připojovány do adresáře /mnt jako adresáře označené příslušným názvem (např. windows, win_c, win_d apod.). Do stejného adresáře
jsou připojovány i výměnná média – CD a DVD-ROM mechaniky, vypalovačky, disketové jednotky (adresáře se pak mohou jmenovat cdrom, dvd, floppy atp.). Do jakého konkrétního adresáře se dané výměnné médium či oddíl jiného
OS připojí, je rovněž uloženo v souboru fstab.
Adresář /home je vyhrazen pro domovské adresáře uživatelů a bývá vhodné vyhradit mu samostatný oddíl na disku již při instalaci. Důvod je praktický – jakmile je potřeba upgradovat či přeinstalovat systém
(má svůj diskový oddíl), data uživatelů zůstanou nedotčena. V /home jsou podadresáře shodné s přihlašovacími jmény uživatelů. Jeden uživatel obvykle nemá právo zápisu do adresářů jiných uživatelů (lze zakázat i čtení aj.).
Každý soubor a adresář (jde vlastně o speciální soubor) má v adresářové struktuře svou unikátní absolutní cestu, pomocí které jsou jednoznačně identifikovány. Absolutní cesta vždy začíná kořenem a končí názvem konkrétního souboru či adresáře. Tak kupříkladu /home/kindle/Dokumenty/clanek.txt jednoznačně určuje soubor clanek.txt v adresáři Dokumenty uživatele kindle.
Oproti absolutní cestě známe ještě relativní cestu. To je poloha adresáře či souboru oproti místu (adresáři), ve kterém se právě nacházíme. Důsledkem je, že určení cílového souboru není jednoznačné,
ale záleží na aktuální poloze v adresářové struktuře. Relativní cestu od absolutní rozeznáme tak, že nezačíná symbolem /.
Pokud jsme tedy v adresáři /home/kindle/Video, pak se k našemu článku dostaneme pomocí absolutní cesty /home/kindle/Dokumenty/clanek.txt, nebo pomocí relativní cesty ../Dokumenty/clanek.txt.
Existují určité speciální symboly pro usnadnění práce s cestami. Symbol ~ nahrazuje cestu do domovského adresáře přihlášeného uživatele, takže místo absolutní cesty bychom mohli napsat ~/Dokumenty/clanek.txt (pokud budete ale jako uživatel bibri, bude mít ~ význam /home/bibri/).
V relativní cestě lze použít symbol .. (dvě tečky) pro označení nadřízeného adresáře a symbol . (jedna tečka) pro označení aktuálního adresáře. Takže ./clanek.txt označuje soubor clanek.txt v aktuálním adresáři a ../../clanek.txt soubor clanek.txt o dva adresáře výše.
Skryté soubory a adresáře se v Linuxu jednoduše vytvářejí tak, že jejich jméno začnete tečkou. Pokud tedy soubor clanek.txt přejmenujete na .clanek.txt, stane se skrytým a pokud je správce souborů nastaven tak, aby nezobrazoval skryté soubory, pak již tento soubor neuvidíte. Stejné platí pro adresáře.
V linuxovém systému existuje množství adresářů, které vznikají bez přímého přičinění běžných uživatelů; jde tedy o adresáře nacházející se jinde než v adresáři /home. Zmíníme se zde alespoň o těch nejdůležitějších a nejzajímavějších:
Pokud chce běžný uživatel provést úkon (odstranění, úpravu souborů, složky), který může mít vliv na správný chod systému, musí jej provést jako superuživatel root (správce). Systém se tím chrání před neodborným zásahem
běžného uživatele.
Pokud se stanete rootem, můžete dělat v systému cokoliv. Rootem by se měl stát vždy správce systému, to znamená upravovat a nastavovat systém by měl vždy jen člověk, který ví, co dělá. Tato významná bezpečnostní
složka v Linuxu odděluje samotný systém, jeho soubory a adresáře od uživatele a jemu přidělenou domovskou složkou. Oddělena je pomocí správcovského hesla neboli hesla roota, které jste zadávali při instalaci.
Některé distribuce obsahují typická ovládací centra, ve kterých najdete nejrůznější možnosti nastavení systému. S typickými ovládacími centry, které znáte např. z Windows, se setkáte především v distribucích jako Mandriva Linux, OpenSuSE. Distribuce Ubuntu, Fedora, především s grafickým prostředím GNOME, taková klasická ovládací centra neobsahují. Veškerá nastavení bývají v hlavní nabídce.
Po instalaci distribuce a prvním spuštění systému je v některých distribucích systémem oznámena možnost instalace nesvobodných ovladačů, v jiných se instalace provádí manuálně (pomocí Správce balíků). Nesvobodné ovladače jsou drivery, které jsou vyvíjeny přímo výrobcem a které nemohou vývojáři distribucí nijak ovlivňovat. Toto se týká především grafických karet NVIDIA a ATI.
Jsou v zásadě dva způsoby, jak se lze něco udělat na vzdáleném linuxovém počítači podle toho, jakým protokolem smím přistupovat:
Práce přes FTP je velice omezená a prakticky se tím dají pouze kopírovat soubory a nastavovat jim práva. Přístupem přes SSH se dá plnohodnotně na vzdáleném serveru pracovat se vším všudy, samozřejmě podle toho, jaká mám přidělena práva. To, jako metodou můžu přistupovat, určuje správce serveru. Standardní webhostingy podporují pouze FTP. V následujících úkolech budeme pracovat přes SSH.
K připojení přes SSH potřebujete znát:
Adresa počítače může být jak IP adresa (jak lokální, tak veřejná), tak doménové jméno (SSH si jej přeloží).
Jestliže jsem obdržel výše zmínění informace, potřebuji na připojení program, který se jmenuje SSH klient. Existuje jich více, nejčastěji uváděné jsou tyto:
PuTTY je klient protokolů SSH, Telnet, rlogin a holého TCP. Dříve byl dostupný jen pro Windows v současnosti je dostupný i pro různé UNIXové platformy. Původním autorem je Simon Tatham z Cambridge. PuTTY je svobodný software, šířený pod licencí MIT.
SSH je v informatice označení pro zabezpečený komunikační protokol v počítačových sítích, které používají TCP/IP. SSH byl navržen jako náhrada za telnet a další nezabezpečené vzdálené shelly (rlogin, rsh apod.), které posílají heslo v nezabezpečené formě a umožňují tak jeho odposlechnutí při přenosu pomocí počítačové sítě. Šifrování přenášených dat, které SSH poskytuje, slouží k zabezpečení dat při přenosu přes nedůvěryhodnou síť, jako je například Internet.
Pod OS Linux spustit terminál a pomocí příkazu:
ssh loginname @192.168.10.8
Z OS Windows přes Putty.exe, položka 'Session', připojit se na IP 192.168.10.8, typ SSH a port 22.
Po přihlášení je možné si změnit heslo k účtu. To se provádí příkazem:
passwd jmeno_uzivatele nove_heslo
Jméno uživatele není nutné zadávat pokud jde o vlastní účet na kterém jsme v dané chvíli přihlášení. A přidám také poznámku, že v Linuxu se nevypisují napsané znaky na obrazovku ani pod skrytými znaky v podobě teček i když se heslo zapisuje!
Bourne Again SHell
Shell je program, který v unixových operačních systémech vytváří základní textové rozhraní mezi uživatelem a operačním systémem.
Prompt je několik znaků na začátku řádku, za kterými stojí kurzor. Toto uskupení se nazývá výzva (anglicky prompt). Před kurzorem se mohou zobrazovat různé informace od jména přihlášeného uživatele, přes jméno počítače, aktuální adresář, čas až po verzi Bashe. Když se v Bashi zobrazí prompt, je možné zadávat příkazy. Obecně to, co zadáme na řádku jako první, je chápáno jako příkaz.
Zadáme příkaz, pokud neodpovídá žádnému internímu příkazu, začne Bash hledat spustitelný soubor (program) stejného jména na disku. Některé příkazy můžeme použít jen takto samostatně, většina jich ale vyžaduje parametry.
Parametr je prostředek k tomu, aby uživatel svůj požadavek upřesnil (např. s čím a jak má příkaz pracovat).
Více argumentů od sebe oddělujeme mezerou.
ls /home
ls /home /var/spool
Vypíše obsahy adresářů /home a /var/spool
Argumenty nemusíme zadávat jen jeden argument. Více argumentů od sebe oddělujeme mezerou. Před argumenty
lze většinou uvést ještě různé volby, které mění nebo rozšiřují funkcionalitu příkazu.
Voleb můžeme uvést více současně.
Volby v krátké (jednoznakové) podobě:
ls -l -a
Zkrácený zápis:
ls -la
Volby dlouhé:
ls --format=long –all
Komu nestačí nápověda získaná pomocí --help, může pro většinu příkazů využít manuálové stránky. Jejich vyvolání je snadné. Stará se o ně program man, jehož parametrem je jméno manuálové stránky, což je zpravidla zároveň jméno programu. Po zadání man ls tak dostaneme manuálovou stránku programu ls. V záhlaví vidíme stručnou definici programu, následuje podrobná syntaxe. I zde platí, že parametry uvedené v hranatých závorkách nejsou povinné.
Program man, parametr - jméno manuálové stránky, jméno programu.
man ls
Obsahuje:
Pro zobrazení se používá příkaz less. Po manuálové stránce se pohybujeme šipkami, klávesami [PgUp] a [PgDn], ukončení [q], nápověda [h].
Nápověda k příkazu
--help
Echo znamená v angličtině ozvěnu. Příkaz vypíše na standardní výstup zadané argumenty, oddělí je mezerou
a zakončí znakem nový řádek.
Pokud bychom chtěli, aby echo chápalo více slov jako jeden argument, můžeme je uzavřít do uvozovek (")
nebo apostrofů ('). Uvozovky totiž dovolují Bashi provádět speciální znaky (umožňuje jejich expanzi).
Co je v apostrofech, bude vypsáno přesně tak, jak to zadáme.
Tento příkaz vymaže obrazovku terminálu.
Příkaz rekurzivně prochází strom podadresářů, který začíná zadanou cestou a hledá v něm soubory splňující zadané podmínky. Implicitní cestou je pracovní adresář.
find [cesta...] [výraz]
find . -name retezec
Hledá soubor zadaného názvu. Najde-li jej, vypíše jej i s cestou. Pokud ne, nevypíše nic.
find /home/jirka /home/lada -size +10000c -atime +5 -ok rm {}\;
Hledá v adresářích /home/lada a /home/jirka, smaže všechny soubory větší než 10000 bajtů a poslední přístup k nim byl před více než pěti dny.
Expr slouží k vyhodnocení zadaného matematického výrazu (expression, tj. anglicky výraz). Každý operand a operátor musí být uveden jako oddělený argument.
expr 5 + 10 15
Příkaz pwd zobrazí cestu a název právě aktuálního adresáře. Pokud jsme v domovském adresáři uživatele bfu, příkaz pwd zobrazí:
pwd /home/bfu
Nový adresář vytvoříme příkazem mkdir. Takto se vytvoří nový podadresář texty v aktuálním adresáři:
mkdir texty
Již existující, prázdný adresář lze smazat příkazem rmdir adresář.
Pro změnu aktuálního adresáře použijeme příkaz cd. Lze použít absolutní i relativní cestu, takže do podadresáře texty aktuálního adresáře bfu lze přejít z tohoto adresáře jednou z těchto možností:
cd texty cd /home/bfu/texty cd ./texty
Příkaz cd bez parametru způsobí přechod do domovského adresáře uživatele.
Výpis souborů v adresáři, získáme příkazem ls. Bez parametrů zobrazí stručný seznam názvů souborů v adresáři. Při použití parametru -l získáme detailní výpis, přidáme-li ještě parametr -a, ve výpisu se objeví i skryté soubory. Lze samozřejmě uvést specifikaci souborů které se mají zobrazit, včetně cesty. Pokud není uvedena, ls vypíše všechny soubory v aktuálním adresáři. Příklady:
ls p*.txt #vypíše soubory které začínají písmenem p ls p?? #vypíše soubory, které začínají p a za ním jsou #právě 2 znaky (např. p01, p02) ls /dev #vypíše obsah adresáře /dev ls -l -R #vypíše adresář včetně podadresářů
K této skupině příkazů snad ještě můžeme připojit příkaz du, který vypíše zaplnění diskového prostoru.
Soubor lze zkopírovat příkazem cp. Lze kopírovat do souboru jiného jména, nebo soubor pod stejným jménem do jiného adresáře. Například:
cp /mnt/floppy/01.jpg /home/bfu #takto zkopírujeme soubor #z diskety do adresáře uživatele bfu cp 01.jpg kopie.jpg #a nakopírovaný soubor si pak uložíme jako kopii
Zvláště pokud kopírujeme hromadně více souborů, bude užitečný parametr -i , při jehož použití bude nutné potvrdit každý přepisovaný, již existující soubor. Jestliže ve výstupním adresáři již existuje soubor 01.jpg, pak po příkazu
cp -i /mnt/floppy/*.jpg
se zobrazí dotaz:
cp ovewrite '01.jpg'?
Aby se soubor přepsal, je třeba ho potvrdit stiskem klávesy y.
Pro zachování starší verze přepisovaného souboru lze použít parametr -b, který vytvoří archivní kopii přepisovaného
souboru.
Obsah adresáře, včetně podadresářů lze zkopírovat s pomocí parametru -r.
cp -r . /tmp
Podobnou syntax má příkaz mv, který soubor přenese do jiného adresáře, užívá se i pro přejmenování souboru.
mv 01.jpg nejlepsi.jpg #obrazek přejmenuje mv 01.jpg obrazky #přenese do podadresáře obrazky (musí existovat)
Existující soubor lze smazat příkazem rm. I zde lze pro bezpečnější rušení více souborů použít parametr -i, který si vynutí potvrzování každého souboru samostatně.
rm /home/bfu/01.jpg
Pro rychlé prohlížení souborů na obrazovce můžeme použít příkazy cat a more.
Příkaz more je výhodný v tom že stránkuje, po zaplnění obrazovky výpis zastaví a čeká na pokyn k dalšímu posunu stiskem klávesy.
Příkaz less je pak alternativou k příkazu more.
Příkaz cat naproti tomu můžeme využít k rychlému vytvoření krátkého textového souboru:
cat >poznamka.txt 1.radek 2.radek
po posledním řádku stisknout Ctrl+D
tar = tape archiver
program pro archivaci souborů, který je schopen sloučit (spakovat) velké množství souborů do jediného archivního souboru,
přičemž zachovává veškeré informace o souborech (čas vytvoření, přístupová práva, atd.)
Použití:
tar functionoptions files
Parametr function může být:
Nejčastěji používané volby options jsou tyto:
Spakování:
tar cf moje_sbaleno moje_skripty
Rozpakování:
tar xvf moje_sbaleno
zip -r zazipovano.zip /home/kindle/
unzip zazipovano.zip
Filtry jsou příkazy pro práci s textovými soubory. Ty na vstupu, podle zadaných parametrů zpracují text nebo textový soubor.
Zpracovaný text odešlou na standardní výstupní zařízení – obrazovku (terminál).
Význam:
Příkaz cat posílá vstup na standardní výstup – začíná od prvního řádku, narozdíl od příkazu
tac, který posílá vstup na standardní výstup, ale začíná od posledního řádku.
Použití:
cat soubor1 soubor2 soubor3 > soubor
cat > soubor Petr Karel Jana Ctrl-C
Příkaz head vypisuje prvních n-řádků ze začátku daného souboru. Defaultně (bez parametru) vypíše prvních 10 řádků.
head soubor head –počet_řádků soubor
Příkaz tail vypíše n-řádků od konce souboru. V základu, tedy bez parametru, vypíše posledních 10 řádků.
tail soubor tail –n počet_řádků soubor
Použití: pro čtení logů,
parametr –f způsobí , že po přečtení n-řádků ze souboru se příkaz neukončí a vypisuje dále nově příchozí data.
tail -f /var/log/messages
Vyhledá a vypíše ze vstupu / vstupního souboru všechny řádky, které obsahují zadaný řetězec.
grep "Kája Mařík" text.txt
Vypíše všechny řádky z text.txt, které obsahují řetězec Kája Mařík
ls | grep "te"
Vypíše všechny soubory v aktuálním adresáři, které obsahují řetězec te.
Používá řadu voleb, některé z nich:
grep –v \# /etc/inetd.conf
Příkaz vypíše všechny nezakomentované řádky v zadaném konfiguračním souboru (# označuje ve skriptech řádky komentáře) a (\ potlačuje speciální význam některých znaků, znak se bude brát jako obyčejný řetězec).
Slouží k extrahování polí nebo znaků z daného souboru či výstupu.
cut -d: -f1,3 /etc/passwd
Ze souboru passwd vybere z každého řádku: pole první (login name) a pole třetí (UID).
Tento příkaz umožňuje spojovat více souborů do jednoho a to tak, že spojí soubory do sloupců – vždy řádek jednoho s řádkem dalšího.
cat > s1 cat > s2 paste s1 s2 modrá barva barva modrá rychlé auto auto rychlé studené pivo pivo studené [CTRL-C] [CTRL-C]
Setřídí vstup / vstupní soubor a to po řádcích podle ASCII tabulky.
Obsahuje řadu přepínačů:
wc -l * | sort -r
Setřídí soubory podle klesajícího počtu řádků.
Očísluje standartní vstup a na standartní výstup vypíše výsledek.
Použití:
ls | nl
Vypíše počet znaků, slov a řádků standartního vstupu na standartní výstup.
wc -l zobrazí počet řádků standartního vstupu. wc -lwc program sám o sobě vypíše tři čísla, které vypočítal ze standartního vstupu. Jedná se (zleva doprava)
o počet řádků, počet slov, počet znaků.
Použití:
ls | wc
diff [volby] soubor1 soubor2
Při porovnávání textových souborů příkaz diff nalezne změny v libovolném znaku na řádku, tedy i např. přidání jedné mezery.
Program se snaží nalézt změněné řádky, vložené části textu, vymazané části textu. Jestliže chceme porovnat obsah dvou souborů
bez ohledu na počet mezer nebo tabulátorů mezi slovy, použijeme přepínač -b (blanks).
Ve výpisu je nejdříve údaj o typu a rozsahu nalezených změn, poté následuje výpis řádek z obou souborů:
znak < označuje řádky prvého souboru, znak > označuje řádky druhého souboru. Údaj o typu a rozsahu změn má tuto
strukturu m x n, kde:
Např. zápis 8,20 c 8,22 označuje že na řádcích 8 až 20 z prvního souboru byly provedeny změny, které jsou zapsány na řádcích 8 až 22 druhého souboru (současně byly dva řádky vloženy).
cmp [volby] soubor1 soubor2
Porovnává dva soubory a vypíše číslo řádku, na kterém najde první rozdíl a číslo znaku, který se první na tomto řádku liší.
comm soubor1 soubor2 cmp soubor1 soubor2 diff soubor1 soubor2
Příkaz nahradí znaky z prvního řetězce odpovídajícími znaky z druhého řetězce. V příkazu tr nelze zadat jméno vstupního souboru na příkazové řádce - nutno pomocí přesměrování.
tr a y < konec text
Nahradí ve vstupním souboru text všechny znaky a znakem y
= přezdívka alias interní příkaz Bashe. Příkaz zapsaný bez parametrů vyvolá seznam přidělených přezdívek. Vytvoření:
alias přezdívka= 'příkaz'
alias ll=ls –la|less
unalias přezdívka
Příkazem ln vytvoříme odkaz, tedy jiný další název kterým se na soubor nebo adresář můžeme odkazovat. Odkaz samozřejmě může být uložen ve zcela jiném adresáři, což se dá využít například pro rychlejší přístup k prohlížení soubor logu /var/log/boot.log.
ln -s /var/log/boot.log log
A pak si ho lze prohlížet přímo pomocí more log.
Častější a užitečnější budou případy, kdy program vyžaduje potřebné knihovny jinde než jsou nainstalovány. V tom případě se místo kopírování jen vytvoří odkaz na patřičný soubor. Zde byl použit parametr -s, který označuje běžnější, symbolický odkaz, který se odkazuje na jméno původního souboru, na rozdíl od druhého typu odkazu, pevného, který je přiřazen přímo inodu, tj. umístění souboru na disku.
Základním rysem každého unixového systému je podpora více uživatelů s možností jemného nastavení práv. Každý, kdo do systému přistupuje, musí mít vlastní unikátní uživatelské jméno a libovolné heslo. Dále by měl mít vlastní domovský adresář, umístěný v adresáři /home. Veškeré informace o uživateli a jeho nastaveních jsou zapsány v souboru /etc/passwd. Práva na editaci tohoto souboru má z bezpečnostních důvodů pouze uživatel root, avšak právo na čtení musí mít kdokoliv, neboť informace z tohoto souboru využívá mnoho programů, což předpokládá čitelnost souboru pro všechny uživatele.
Právě z tohoto důvodu už soubor /etc/passwd neobsahuje hesla. Ta jsou v šifrované podobě umístěna v souboru /etc/shadow, k němuž může přistupovat pouze administrátor (root). Oddělení hesla od ostatních informací o uživateli se nazývá stínění.
Samotné jádro OS Linux považuje uživatele za pouhé číslo tzv. UID (User ID), od něj se pak odvozují samotné uživatelské účty, které se dále dělí na 3 typy:
Základní databází uživatelů je v systému textový soubor /etc/passwd (angl. password file), v němž jsou uvedeny platná uživatelská jména a další k nim přidružené informace. Každému uživateli odpovídá v souboru jeden záznam - řádek, který je rozdělen na sedm polí, jejichž oddělovačem je dvojtečka. Význam jednotlivých položek je následující:
Každý uživatel systému má k souboru /etc/passwd přístup (může jej číst). Může tedy například zjistit přihlašovací jména
ostatních uživatelů. (To ale neznamená, že jsou všem přístupná i hesla!)
Zobrazení souboru passwd provedeme příkazem:
cat /etc/passwd
V souboru passwd jsou místo hesel jen znaky "x", protože samotná hesla jsou uložena v bezpečnějším souboru "shadow", tedy
stínovém souboru hesel. Tento soubor může číst pouze superuživatel!
Zobrazení informací v něm provedeme příkazem:
su root cat /etc/shadow
Jak funguje šifrování hesla a proč nejde jen tak dešifrovat? Je to prosté: Ve chvíli, kdy si uživatel zvolí své přístupové
heslo, je pro něj určena také hodnota zvaná salt. Jde o náhodně vygenerované číslo, s jehož pomocí se zakóduje heslo,
které si uživatel zvolil. Jak salt, tak i samotné kódované heslo, jsou uloženy v souboru /etc/shadow.
Při přihlašování se nejprve načte hodnota salt a s její pomocí se zakóduje heslo, které uživatel zadal při tomto přihlašování.
Pokud výsledný řetězec odpovídá zápisu v /etc/shadow, je uživatel oprávněn ke vstupu do systému. To vysvětluje, proč
stejné heslo u více uživatelských účtů může mít v zašifrované formě zcela odlišnou podobu.
Jak už jsme si řekli, uživatelské skupiny slouží k diferenciaci uživatelských pravomocí. Například určíme, že několik
uživatelů má přístup na Internet - přiřadíme je tedy do skupiny Internet. Dalším chceme zakázat hraní her - vyřadíme je
tedy ze skupiny Games. Všichni uživatelé dané skupiny tedy sdílí přístupová práva, která nastavíme této skupině.
Každý uživatel systému musí náležet alespoň do jedné uživatelské skupiny. Může ale také patřit do více skupin. Tímto
způsobem je možné snadno kombinovat práva tak, aby byla na míru ušita konkrétnímu uživateli a jeho potřebám.
Veškeré informace o skupinách, jejich nastavení a členech, jsou uloženy v souboru /etc/group.
Tento soubor obsahuje:
useradd pokus
Co se udělá v souboru passwd:
Co se udělá v souboru grub:
Domovský adresář:
ls -la /home/pokus
Nastavení hesla:
passwd pokus
Zrušení účtu:
userdel pokus
Tímto příkazem jsou smazány záznamy z konfiguračních souborů, ale soubory, kterých byl tento uživatel vlastník zůstanou!
Zrušení účtu včetně souborů:
userdel -r pokus
Soubory a adresáře mohou být před nežádoucím přístupem chráněny nastavením přístupových práv. Pro každý soubor lze nastavit
přístupová práva pro čtení, zápis nebo vykonání souboru pro vlastníka (User) souboru, skupinu (Group) uživatelů a všechny
ostatní (Others).
Vlastníkem souboru je ten, kdo soubor vytvořil. Obyčejně vlastník může soubor číst i do něj zapisovat, ostatní uživatelé pak
mohou soubor pouze číst.
Ke zjištění přístupových práv použijeme příkaz:
ls -l
Zobrazí se tabulka:
drwx------ | 1 | own | grp | 24 | Apr | 4 | 22:21 | adresar |
-rw-r--r-- | 1 | own | grp | 930 | Apr | 4 | 22:24 | soubor1 |
-rw-r--r-- | 1 | own | grp | 7925 | Apr | 4 | 22:26 | soubor2 |
-rw-r--r-- | 1 | own | grp | 37 | Apr | 4 | 22:28 | soubor3 |
Význam jednotlivých sloupců:
Jak porozumět zápisu: trwxrwxrwx
Písmeno | Práva | Hodnota |
r | čtení | 4 |
w | zápis | 2 |
x | spouštění | 1 |
Přístupová práva pro soubor se definují:
Přístupová práva pro adresáře mají tyto významy:
Z těchto údajů tedy vyplývá:
Různé kombinace nastavení přístupových práv:
Kombinace | Ekvivalent | Popis |
-rw------- | 600 | vlastník má práva pro čtení a zápis (nastavení většiny souborů) |
-rw-r--r-- | 644 | vlastník má práva pro čtení a zápis, skupina a ostatní mohou pouze číst. |
-rw-rw-rw | 666 | každý může číst a zapisovat (tato kombinace není doporučena, jelikož může být soubor kdykoli a kýmkoli změněn) |
-rwx------ | 700 | vlastník má práva pro čtení, zápis a spuštění (nejlepší kombinace pro programy, které chce vlastník spouštět) |
-rwxr-xr-x | 755 | vlastník má práva pro čtení, zápis a spouštění (všichni uživatelé mohou soubor číst a spouštět) |
-rwxrwxrwx | 777 | všichni mají práva pro čtení, zápis a spouštění |
-rwx--x--x | 711 | vlastník má práva pro čtení, zápis a spouštění, ostatní mohou program pouze spouštět (užitečné pro programy, které mohou spouštět všichni, ale nemohou je okopírovat) |
drwx------ | 700 | pouze vlastník může číst a zapisovat do tohoto adresáře |
drwxr-xr-x | 755 | tento adresář může být změněn pouze vlastníkem, všichni ostatní však mohou zjistit jeho obsah. |
drwx--x--x | 711 | vhodná kombinace, chcete-li aby mohli obsah adresáře číst všichni uživatelé, soubor byl pro příkaz ls neviditelný. Omezíte tím přístup pouze na osoby, které znají obsah adresáře. |
Změní přístupová práva jednoho nebo více souborů. Pouze vlastník souboru nebo superuživatel může měnit přístupová práva. Práva mohou být vypsána jako číslo nebo výraz ve tvaru kategorie, operátor, právo.
Přístupová práva lze nastavit:
Výsledná práva jsou tvořena součtem číslic
user group others r 0400 0040 0004 w 0200 0020 0002 x 0100 0010 0001
chmod 444 soubor
Všem je nastaveno pouze právo pro čtení.
Příklad:
chmod u+x soubor
přidání práva provádění vlastníku souboru
chmod 644 soubor
nastaví rw-r--r--
Příkaz chown (change owner) slouží k přenášení vlastnických páv mezi uživateli. Tento příkaz smí použít pouze superuživatel.
chown username filename
Příkazem chgrp (change group) lze měnit nastavení oprávnění k souboru pro skupinu.
chgrp groupname filename
Při vytvořeni souboru se v adresáři vytvoří ukazatel na soubor. Spojuje jméno souboru s místem na disku, kde je soubor uložený. Odkaz se používá ke sdílení souborů.
Pevný odkaz je jméno souboru, jeden soubor muže mít několik pevných odkazů - jmen. Každý soubor je reprezentován alespoň jedním odkazem v adresáři, kde byl vytvořen - viz sloupec popisující počet odkazů v ls -l. Je to prostě jiné jméno pro soubor (který je na disku pouze jednou). Ve výpisu vidíme, že soubory běžné soubory i pevné odkazy mají ve druhém sloupci dvojku. Což je počet pevných odkazů. Pevné odkazy nejsou svázány se jménem souboru (ale s číslem inodu). Nejde dělat pevné odkazy mezi různými oddíly disku a na adresáře.
Další odkazy na už existující soubor se vytvářejí pomoci příkazu ln, používá se stejně jako cp.
vi bob ln bob /home/vas_home_adr/texty/bobek
V adresáři work vytvoří soubor bob a v adresáři texty k němu odkaz bobek.
Symbolický odkaz je malý soubor, který obsahuje cestu k odkazovanému, tj. sdílenému souboru.
Tento druh odkazu se dá se přirovnat k hypertextovému linku na webu. Ve výpisu vidíme, na který soubor odkaz ukazuje. Odkaz
je svázán se jménem souboru, tudíž jeho přejmenování odkaz zneplatní. Můžeme vytvářet odkazy na adresáře. Při výpisu pomocí
ls je prvním znakem přístupových práv písmeno s.
Vytvoření symbolického odkazu:
ln -s zdroj cíl
Spuštění:
vi soubor (soubor nemusí existovat)
Základním příkazem pro ukončení je :q. To projde pouze v případě, že jste v textu neprovedli žádné změny. Jinak skončíte s chybovým hlášením:
No write since last change (use ! to override)
Říká, že poslední změny v souboru nemáte uloženy. Vás další postup závisí na tom, zda je chcete uložit nebo ne.
Ukončení s uložením změn:
Klasický postup velí nejprve uložit změny příkazem :w a poté ukončit editor pomocí :q. Oba příkazy můžete sloučit
do jednoho společného :wq.
Jelikož je tato varianta poměrně častá, byla pro ni vytvořena ještě jedna zkratka. Pokud v normálním režimu zadáte ZZ
(dvě velká "Z"), provede se "inteligentní ukončení". Pokud byl soubor změněn, uloží se. Poté editor ukončí svou činnost.
Ukončení bez ukládání změn:
Jestliže změny nechcete uložit použijte příkaz :q!. Obdobně lze vykřičníkem přehlušit protesty i v několika dalších
situacích.
Po otevření souboru je editor nastaven v příkazovém módu. V rámci příkazového módu můžete provádět následující operace:
V rámci vkládacího režimu je možné přidávat nový text do souboru. K opuštění vkládacího režimu je potřeba stisknout
klávesu ESC.
Následující příkazy vyvolají vkládací mód:
Slouží k zadávání příkazů na příkazovém řádku. V něm se realizují nejkomplikovanější operace, jako je vyhledání a náhrada řetězce znaků, práce se soubory a podobně. Režim ex je zahájen znakem :. Bývá zvykem jména příkazů pro příkazový řádek zahajovat dvojtečkou, aby se tato skutečnost zdůraznila. Režim ex je jednorázový. Po provedení příkazu (který odešlete klávesou Enter) se editor vrátí do normálního režimu. Pokud chcete dosáhnout téhož, ale bez provedení příkazu, použijte jako obvykle [Esc].
Samozřejmě fungují i klasické kurzorové klávesy. Pro zmíněnou obludnost existují dva rozumné důvody:
Druhým nejčastějším pohybem je posun o jednu obrazovku. Ten ve vim zajistí klávesové kombinace [Ctrl-F] (směrem dolů) a [Ctrl-B] (vzhůru). V běžných implementacích můžete pro tyto pohyby používat i obvyklé klávesy [PageDown] a [PageUp]. Vi se snaží při posunu na sousední řádek udržovat kurzor ve stejném sloupci. Je-li některý řádek kratší, posune kurzor na jeho poslední znak. Pokud se následující řádek opět prodlouží, vrátí se do původního sloupce.
Téměř všechny příkazy vi lze provádět opakovaně. Pokud nejprve napíšete číslo n a po něm určitý příkaz, bude proveden n-krát.
Například pohyb o 20 znaků doleva by zajistil příkaz 20h. Opakovat lze skutečně prakticky všechno, včetně komplikovaných věcí.
Další věci pro opakování:
Pro posuny o slovo slouží následující skupina příkazů:
Veškeré likvidační operace mají jednu zajímavou vlastnost: vymazaný text se automaticky ukládá do registru, z nějž jej následně můžete vložit na jiné místo. O vložení se postará klávesa p (vkládá za aktuální pozici) nebo P (před aktuální pozici).
Příkaz k vyhledání řetězce znaků můžete ve vim zadat dvěma základními způsoby.
Je-li nastaveno :set ignorecase, vi je nebude rozlišovat. Pokud naopak použijete :set noignorecase, budou malá a velká písmena považována za odlišná (to je implicitní stav). Při nastavení :set smartcase se rozlišování malých/velkých písmen snaží chovat inteligentně. Zapíšete-li hledaný řetězec malými písmeny, hledá malá i velká. Pokud použijete nějaká velká písmena, hledá řetězec přesně v tom tvaru, ve kterém jste jej zadali.
Hledání je totiž pohyb se vším, co k němu náleží. Můžete ho proto kombinovat s modifikátory, které byly popsány v kapitole o editaci textu. Takže například d/ahoj vymaže vše od stávající pozice kurzoru až k nejbližšímu následujícímu výskytu řetězce "ahoj".
.d8888b. 888b 888 888 888 d88P Y88b 8888b 888 888 888 888 888 88888b 888 888 888 888 888Y88b 888 888 888 888 88888 888 Y88b888 888 888 888 888 888 Y88888 888 888 Y88b d88P 888 Y8888 Y88b. .d88P "Y8888P88 888 Y888 "Y88888P" 88888b. 8888b. 88888b. .d88b. 888 "88b "88b 888 "88b d88""88b 888 888 .d888888 888 888 888 888 888 888 888 888 888 888 Y88..88P 888 888 "Y888888 888 888 "Y88P"
Otevírání souborů i jejich vytváření je s nanem snadné, stačí jen napsat:
nano nazev_souboru
Nano nemá více režimů, to znamená, že můžete ihned začít psát a vkládat text. Jestliže editujete konfigurační soubor jako třeba /etc/fstab, použijte parametr -w (zakázání zalamování slov).
nano -w /etc/fstab
Je opravdu velmi důležité, abyste při otevírání konfiguračních souborů použili tento přepínač. Neučiníte-li tak, může se stát, že systém již nabootuje nebo bude mít jiné problémy.
Chcete-li uložit provedené změny, zmáčkněte [Ctrl+O]. Chcete-li editor ukončit, použijte [Ctrl+X]. Budete-li ukončovat editor s otevřeným změněným soubor, nano se Vás zeptá, zda jej budete chtít uložit. Pokud změny nechcete zachovat, jenom zmáčkněte N, pro jejich uložení Y. V tom případě budete dotázáni na jméno souboru; napište jej a zmáčkněte Enter. Pokud jste omylem potvrdili, že chcete uložit soubor, avšak rozmysleli jste si to, můžete proces při žádosti o jméno souboru přerušit stiskem [Ctrl+C].
Pro vyjmutí jedné řádky použijte [Ctrl+K] (držte CTRL a zároveň zmáčkněte k) — řádek zmizí. Pro vložení najeďte kurzorem tam, kam má text přijít, a zmáčkněte [Ctrl+U] — řádka byla vložena. Potřebujete-li přesunout celý odstavec, jednoduše pomocí [Ctrl+K] vyjměte řádek po řádce a pak je jedním [Ctrl+U] vložte na potřebné místo. Jak vidíte, celý odstavec se posunul tam, kam jste chtěli.
Hledání textu je snadné, stačí zmáčknout [Ctrl+W] (od anglického "WhereIs"), napsat hledaný řetězec a zmáčknout Enter.
Chcete-li hledat další výskyt, zmáčkněte Alt+W.
Poznámka: V nápovědě nano je klávesa Ctrl značena jako stříška (^), takže například [Ctrl+W] je zapsáno jako ^W. Klávesa Alt
je značena jako M (od "Meta"), tudíž M-W znamená Alt+W.
Standardní výstup a standardní chybový výstup (zobrazený na terminálu) lze přesměrovat jinam, nejčastěji do souboru:
ls > seznam
Vznikne soubor seznam s výpisem obsahu adresáře. Pozor, pokud už soubor seznam existuje bude
přepsán!
Zobrazení souboru provedete například příkazem cat.
Význam znaků <, >:
Pokud na konec příkazu přidáte řetězec >>název_souboru, výstup příkazu se připojí k souboru se zadaným názvem
místo toho, aby se soubor přepsal. Symbol >> se označuje jako operátor připojení výstupu.
Chcete-li například připojit soubor soubor2 k souboru soubor1, zadejte:
cat soubor2 >> soubor1
Poznámka: Jestliže soubor soubor1 neexistuje, je vytvořen.
Sloučení různých souborů do jednoho souboru se označuje jako zřetězení. Na příkazový řádek zadejte například:
cat soubor1 soubor2 soubor3 > soubor4
Vytvoří se soubor soubor4, který se skládá z obsahu souborů soubor1, soubor2 a soubor3 připojených v daném pořadí. Pozor, příkaz cat nejdříve vytvoří výstupní soubor, což je nutné vzít na vědomí v případě složitějších řetězení.
Pokud na konec příkazu přidáte řetězec < název_souboru, vstup příkazu se čte ze souboru se zadaným názvem. Symbol < se
označuje jako operátor přesměrování vstupu.
Poznámka: Vstup lze přesměrovat pouze pro ty příkazy, které standardně přebírají vstup z klávesnice.
mail tomas < dopis1
Odešle soubor dopis1 jako zprávu uživateli tomas.
Soubor /dev/null je speciální soubor. Tento soubor má jedinečnou vlastnost, že je vždy prázdný. Všechna data, která odešlete do souboru /dev/null, se zahazují. Tato vlastnost je užitečná, když spouštíte program nebo příkaz, který generuje výstup, který chcete ignorovat.
Kromě standardního vstupu a výstupu příkazy často vytvářejí jiné druhy výstupu, například chybové a stavové zprávy známé jako diagnostický výstup. Podobně jako standardní výstup se i standardní chybový výstup vypisuje na obrazovku, pokud není přesměrován.
Máte například program nazvaný mujprog, který přijímá vstup z obrazovky a za běhu generuje zprávy, které byste chtěli ignorovat. Chcete-li číst vstup ze souboru mujskript a vyřadit standardní výstup zpráv, zadejte:
mujprog < mujskript 2> /dev/null
V tomto případě používá program mujprog soubor mujskript jako vstup a veškerý standardní chybový výstup se zahodí.
Roura - pipe
Nástroj pro spojování procesů do řetězce pomocí vzájemného propojení standardních proudů tak,
že je vždy výstup je nasměrován přímo do vstupu . Jde o jednosměrnou komunikaci.
V příkladu uvedeném níže příkaz ls vypisuje obsah adresáře a less je program, který umožňuje prohlížet obsah svého vstupu po jednotlivých stránkách, vracet se a vyhledávat. Kolona příkazů v příkladu tedy umožní prohlížet celý výpis postupně, i když se nevejde na jednu obrazovku terminálu.
ls -l | less
Proces je v UNIXu každý spuštěný program, nahraný do paměti. Každý proces má svoje jednoznačné identifikační číslo PID, vlastníka, prioritu a rodiče.
Když zadáme jméno spustitelného souboru v DOSu, ten se dívá, zda toto jméno existuje v aktuálním adresáři.
Pokud ano, tak jej spustí. V Linuxu je třeba zadat jméno spustitelného souboru včetně cesty k němu i když
máme soubor v aktuálním adresáři!
Stačí použít relativní cestu, tj. ./jmeno_souboru.
Jinak Bash prohledává adresáře uvedené v PATH. Proměnná PATH obsahuje seznam adresářů ve kterých jsou
spustitelné soubory (většinou jsou to adresáře bin).
Pokud chceme aby byl program nebo skript spustitelný, je vhodné použít konstrukci:
chmod +x jmeno_souboru
Kdy souboru přidáme právo X, čímž umožníme soubor spouštět (eXecute). V dalším kroku pak program spustíme. Takto se uvádějí v chod především skripty, tento postup lze však použít i pro další programy.
./jmeno_souboru
PID je unikátním číslem, náležící právě jednomu procesu a které jádro přiděluje vzestupně každému spuštěnému procesu. Číslo 1 má vždy proces init, který je v systému spuštěn jako první. Pro zjišťování PID kteréhokoli z běžících procesů (tedy nejen úloh spuštěných v rámci Bashe) slouží program ps. Když jej spustíme bez přepínačů, uvidíme jen aktuální Bash, seznam spuštěných úloh a vlastní běžící ps.
Ps vypíše informace o běžících procesech. Nevyžaduje znak "-" před zadáváním voleb.
Příkaz ps bez parametrů vypíše pouze procesy uživatele, který tento příkaz spustil a pouze ty procesy, které byly spuštěny ze stejného terminálu jako samotný příkaz ps. Chceme-li
vypsat všechny procesy běžící v systému, tak použijeme následující parametry:
Stavy při výpisu procesů pomocí ps:
Dalším příkazem, který vypisuje aktuálně běžící procesy a spoustu dalších důležitých systémových informací je příkaz top. Tento příkaz na rozdíl od předchozího příkazu ps nevypisuje pouze výpis aktuálního stavu procesů v systému, ale dokáže tento výpis dynamicky po určitých časových intervalech měnit. Díky tomu můžeme v reálném čase sledovat změny stavu procesů, jejich "boj" o procesor, aktuální velikost paměti, které procesy alokují a spoustu dalších užitečných informací. Defaultní časový interval změny výpisu je nastaven na 5 sekund, lze jej však změnit pomocí parametru -d.
Chod programu můžeme ovlivnit klávesami:
Po zjištění viníka našich problémů nemusíme top opouštět. Po stisknutí [K] budeme vyzváni k zadání PID, kterému chceme poslat balíček. Po odentrování správného PID nám bude nabídnuto zadání signálu. Nezadáme-li žádný, bude odeslán SIGTERM (15), což je požadavek k ukončení, jeho násilná varianta, jak už bylo uvedeno je signál s číslem 9.
Aby bylo možné co nejlépe využít víceúlohového prostředí (multitaskingu), zavedly interpretry možnost přepnout program spuštěný v textovém prostředí na pozadí. Spustit nebo přepnout program na pozadí znamená, že v průběhu jeho
běhu máme k dispozici prompt a můžeme zadávat další příkazy. Spustíme-li prostřednictvím Bashe nějakou aplikaci v grafickém prostředí, neukáže se nám prompt dříve, než tato aplikace skončí.
Řekněme, že jsem z terminálu spustil gkrellm (panel pro monitorování systému), který teď blokuje prompt. Aplikace běží a kurzor v Bashi stojí nebo bliká bez promptu na začátku nového řádku. Takto běžící program můžeme
z terminálu zastavit kombinací kláves [Ctrl+z]. Objeví se hláška Stopped. Od tohoto okamžiku sice máme zase prompt, ale program je zamrzlý. Aby mohl ve své činnosti pokračovat, musíme mu povolit činnost na pozadí příkazem bg.
Po odentrování se ihned rozběhne.
Existuje ale i způsob, jak spustit grafickou aplikaci na pozadí přímo. Dělá se to přidáním znaku ampersand (&) za příkaz spouštějící aplikaci. Tak např. XMMS spouštíme z příkazové řádky zadáním:
xmms &
Po odentrování dostaneme zpátky prompt a také okno spouštěné aplikace.
Z výše zmíněného vyplývá, že programů na pozadí můžeme spustit více souběžně. Jak se v nich potom ale vyznat, když jim chceme posílat různé signály? Jednoduše, neboť Bash si tyto úlohy čísluje. Seznam běžících nebo stojících
úloh získáme příkazem jobs.
V seznamu je na každém řádku jedna úloha. V hranaté závorce je uvedeno číslo úlohy, následuje status (Running/Stopped) a zakončuje příkaz, kterým jsme úlohu spustili.
Velmi důležité je zde číslo úlohy, pomocí něhož můžeme jednotlivé z nich oslovovat. Chceme-li např. vrátit z pozadí do popředí úlohu číslo 2, zadáme:
fg %2
Bash vypíše jméno příslušné úlohy a začne ji provádět na popředí, tj. nevrátí nám prompt. Ten bychom získali postupem [Ctrl+Z] a bg %2.
Nyní se podíváme ještě na pár parametrů příkazu jobs. Přepínače lze samozřejmě kombinovat.
1. Spustíme-li úlohu na pozadí (&), vypíše se identifikace:
yes > /dev/null & [1] 1234
číslo úlohy je 1 a má top-level proces 1234.
2. Běží-li úloha normálně spuštěná na popředí a chceme s ní nějak naložit, stiskneme [CTRL-Z] a shell pošle procesu signál STOP. Vypíše se:
yes > /dev/null [2]+ Stopped yes > /dev/null
jobs
Vypíše seznam řízených úloh.
’+’ znamená current job, ’-’ znamená previous job.
[1]- Running yes > /dev/null & [2]+ Stopped yes > /dev/null
3. Spuštění stoplého procesu:
fg %2
4. Zabití zastaveného procesu:
kill %1
Teď si ukážeme, jak ukončit nějakou úlohu na pozadí. Lze to samozřejmě udělat tak, že ji nejprve přepneme do popředí a potom ukončíme klávesovou kombinací [Ctrl+C]. Existuje ale i jiný způsob. Seznamme se s legendárním příkazem kill. Abychom určili adresáta, použijeme číslo úlohy (třeba kill %3) nebo číslo procesu (PID - např. kill 7190), tím pošleme požadavek na ukončení. Pokud program nereaguje vůbec, můžeme jej násilně ukončit signálem 9 takto:
kill -9 %2
Signál je systémem generovaná událost, kterou používá na základě reakce na podmínku a dává tím procesu šanci provést odezvu. Používají se při chybách v programech. Vyvolává je shell nebo terminal driver nebo si je procesy posílají mezi sebou.
Příznaky ve sloupci "Akce" mají následující význam:
Aplikace, která se má spouštět plánovaně nesmí mít interaktivní rozhraní. Pokud by totiž program potřeboval komunikovat s uživatelem, ztrácelo by předpřipravené spouštění smysl. K jednorázovému spouštění procesů se používá příkaz at. Nástroj se používá k ukládání příkazů, které mají být provedeny jednorázově později, v předem definovaný čas. Vykonání úlohy má na starosti démon. Jeho spuštění se provede příkazem:
/etc/init.d/atd start
Parametrem příkazu at je plánovaný čas vykonání. Pomocí přepínače -f lze zadat i soubor, který bude v určený okamžik proveden. Pokud soubor neuvedeme, objeví se prompt at>, kam příkazy zadáme. Zadávání ukončíme stiskem [Ctrl+D].
Předpokládejme, že je 16:00, do příkazového řádku zapište:
at 16:45
warning: commands will be executed using /bin/sh
at>
play /usr/share/sounds/KDE_Startup.wav
Po odentrování každého řádku přidáváme další příklady. Zadávání ukončíme již zmíněnou zkratkou [Ctrl+D].
Jako potvrzení úlohy proběhne hláška:
job 1 at Mon Feb 6 16:45:00 2012
Dále se hodí využít flexibilnost příkazu, jako ukazuje následující příklad:
spsei@debian:~$ at now + 2 hours warning: commands will be executed using /bin/sh at> shutdown -h now at> <EOT> job 2 at Mon Feb 6 18:50:00 2012
Se stavbou at now + ... můžete, kromě hodiny (hour) / (hours), použít i minuty (minutes), dny (days), týdny (weeks) i roky (years).
Pro zobrazení naplánovaných úloh se používá příkaz:
at -l
Níže uvedeným příkazem spolu s číslem úlohy (zjištěné pomocí přepínače -l) úlohu zrušíte
atrm 1
Právo na používání nástroje at lze regulovat:
Cron je unixová utilita, která umožňuje automatické spouštění úkolů (scriptů) v pravidelných intervalech. To je velmi užitečné například při zálohování dat, pravidelné údržbě systému nebo kontrole funkčnosti vzdálených
zařízení.
Crontab je soubor, který obsahuje soupis příkazů, které jsou spouštěny v určeném čase a to na samostatném řádku. Příklad crontabu může vypadat například takto:
# Delej neco kazdou lichou hodinu kazdy sudy den: * 1-23/2 */2 * * root /usr/local/sbin/delej_tady_neco.sh
# Zalohovani dat 1 x tydne v noci z patku na sobotu (v 0:42): 42 0 * * 6 root /usr/local/sbin/zal_data_tyden.sh
Skriptovací jazyky stejně jako kompilované programovací jazyky začínají psaním zdrojového kódu, ale již nejsou kompilovány a spuštěny. Místo toho interpreter jazyka čte instrukce ze zdrojového kódu a podle obsahu tyto instrukce vykonává. V případě bash spouští programy, které jste napsali do zdrojového kódu. Bohužel, protože interpreter čte každé instrukce jednotlivě a jejich zpracování není rychlé (program je částečně překládán za běhu), jsou tedy skriptovací jazyky výrazně pomalejší než kompilované programy. Hlavní výhoda skriptovacích jazyků spočívá v jejich přenositelnosti na jiné platformy či operační systémy, jejich jednoduchosti a také velikosti. Skriptovacím jazykem je právě například bash. Příklady dalších interpretovaných (skriptovacích) jazyků jsou JavaScript, Perl, Lisp, Prolog a další.
Proměnné v systému lze rozdělit do tří skupin.
Proměnné jsou definovány svými jmény. Hodnotu proměnné přiřadíme znaménkem "rovná se ".
jmeno="Lenka"
Proměnnou zrušíme příkazem unset.
unset jmeno_promenne
Hodnotu proměnné zobrazíme pomocí echo.
echo "Zadali jste: $jmeno"
Změna hodnoty:
Dvě proměnné: jmeno="Bart" a prijmeni="Simpson" můžeme spojit: cele="$jmeno $prijmeni".
Hello world. První řádka programu říká Linuxu, co se má použít za interpret.
#!/bin/bash echo "Hello, world!"
Předpokládejme, že se náš skript jmenuje hello.sh (přípona sh není podmínkou, většina skriptů žádnou příponu nemá). Podíváme se jaká má nastavena práva. Zjistíme, že chybí právo pro spuštění. Musíme tedy nastavit právo pro spuštění. Zápis chmod může vypadat takto:
chmod 700 ./hello.sh, nebo chmod +x ./hello.sh
Následně skript můžeme spustit takto:
./hello.sh Hello, world!
Do programu je také možné přidat komentář. Děje se tak pomocí znaku #. Začíná-li řádka právě tímto znakem, bere se tato řádka jako poznámka. Tedy tato řádka se nevykonává. Jedinou výjimku tvoří právě první řádka skriptu, ve které je uveden interpreter, který provede skript.
Script, který přesune všechny soubory do adresáře, a pak tento adresář smaže i s tím, co obsahuje. Poté se tento adresář znovu vytvoří:
#!/bin/bash mkdir trash mv * trash rm -rf trash mkdir trash echo "Vsechny soubory jsou smazany!"
BASH také podobně jako většina programovacích jazyků dovede provádět matematické výrazy.
Výsledek dostaneme pomocí konstrukce: expr 3 + 3 (pozor na prázdné znaky)
Možné matematické operace:
#!/bin/bash x=8 y=4 z=$[$x + $y] echo "Soucet $x a $y je $z"
Bash dovede pracovat pouze s čísly celými. Nelze tedy používat desetinná čísla.
V bashi můžete vytvořit script, který bude interaktivní, tedy reagovat na vstup uživatele (popř. na vstup čtený ze souboru). Příkaz uživatelského vstupu je příkaz read. Příkaz vyžaduje jako parametr proměnnou.
#!/bin/bash echo -n "Zadej sve jmeno: " read jmeno echo "Zdravim te $jmeno!"
Syntax:
if seznam; then seznam; [ elif seznam; then seznam; ] ... [ else seznam; ] fi
Provede se ’if seznam;’. Pokud jeho návratový kód je nulový (OK), provede se ’then seznam;’. Jinak se provede ’elif seznam;’ (...) nebo ’else seznam;’. Návratový kód je kód posledního provedeného procesu nebo 0, pokud se neprovedl žádný příkaz.
if test -f /etc/foo then #Soubor existuje. Zkopíruj tedy soubor cp /etc/foo . echo "Hotovo!" else # Soubor neexistuje. Vypis tedy chybu echo "Soubor neexistuje!" exit fi
Struktura case je velmi podobná struktuře if. V základu struktura case je určena pro vykonání jednoho z několika kusů kódu a to podle toho, jakou hodnotu má proměnná uvedená za příkazem case. Zde je příklad struktury case:
#!/bin/bash x=5; # inicializuje x na hodnotu 5 # nyní se bude testovat hodnota x: case $x in 0) echo "Hodnota x je 0." ;; 5) echo "Hodnota x je 5." ;; 9) echo "Hodnota x je 9." ;; *) echo "Hodnota x neni ani 0, ani 5, ani 9." esac
Syntax:
while seznam; do seznam; done until seznam; do seznam; done
Seznam ’do seznam;’ se provádí tak dlouho, dokud je návratový kód
Struktura for se používá, chcete-li během cyklu použít různé hodnoty pro jednu proměnnou, a to tak, že při každém průběhu cyklu bude mít proměnná jinou hodnotu. Například chcete napsat skript, který desetkrát vytiskne každou sekundu tečku (.) lze to provést takto:
#!/bin/bash echo -n "Zjistuji chyby v systemu" for dots in 1 2 3 4 5 6 7 8 9 10; do echo -n "." sleep 1; done echo "System is clear."